// TODO：专门管理依赖

let uid = 0
export default class Dep {
    constructor() {
        // 使用数组存储自己的订阅者（存放 Watcher实例），sub => subscribes订阅者意思
        this.subs = []
        this.id = uid++
    }
    // TODO：添加订阅者
    addSub (sub) {
        this.subs.push(sub)
    }
    // TODO：添加依赖
    addDepend () {
        // 指定一个全局位置，只要是全局唯一（window.target也行），没有歧义就行
        let watchObj = Dep.target
        if (watchObj) {
            this.addSub(watchObj)
        }
    }
    // TODO：发布消息，通知更新
    notify () {
        console.log('通知notify，值改变了');
        // 1 浅克隆一份
        const subs = this.subs.slice(0)
        // 2 遍历
        for (let i = 0, len = subs.length; i < len; i++) {
            subs[i].update()
        }
    }
}